 /// @file InterOpUtils.h
 /// @brief InterOpUtils 
 /// @copyright Copyright (c) 2025  Hefei Jiushao Intelligent Technology Co., Ltd. All rights reserved.
 /// @createtime 2025-02-17

#ifndef INTEROPUTILS_H
#define INTEROPUTILS_H

#include "SPAIopPMINote.h"
#include "SPAIopWString.h"
#include "SPAIopAcisSystem.h"
#include "common/constant.h"
#include "SPAIopAcisError.h"
#include "transf.hxx"
#include "pmi/InterOpPMINote.h"
#include "pmi/InterOpRoughness.h"
#include "SPAIopPMIRoughness.h"
#include "pmi/InterOpPMIDatum.h"
#include "SPAIopPMIDatumTarget.h"
#include "pmi/InterOpGDT.h"
#include "pmi/InterOpDimension.h"
#include "SPAIopPMIGDT.h"
#include "SPAIopPMIDimension.h"

AMCAX_EXCHANGE_NAMESPACE_BEGIN

namespace InterOp {
    SPAIopWString StringToSPAIopWString(const std::string &std_string) ;
    
    std::string SPAIopWStringToString(const SPAIopWString &spaString) ;

    bool CheckLicense(const std::string &spaLicence, SPAIopAcisSystemInitGuard *initGuard) ;

    void ShowAcisErrorMsg(const SPAIopAcisError &error) ;

    SPAtransf GenerateTransform(const double oAffineTransform[3][3], const double oTranslation[3]) ;
    
    namespace  PMI::Helper {

        PMIFont ToFont(const SPAIopPMIFont &iFont) ;

        PMIRoughnessObtentionType ToRoughnessObtentionType(const SPAIopPMIRoughnessObtentionType &iRoughnessObtention) ;

        PMIRoughnessApplicabilityType ToRoughnessApplicabilityType(const SPAIopPMIRoughnessApplicabilityType &iRoughnessApplicability) ;

        PMIDatumTargetType ToDatumTargetType(const SPAIopPMIDatumTargetType &iDatumTargetType) ;

        PMIToleranceType ToToleranceType(const SPAIopPMIToleranceType &iToleranceType) ;

        PMIToleranceValueType ToToleranceValueType(const SPAIopPMIToleranceValueType &iToleranceValueType) ;

        PMIToleranceModifierType ToToleranceModifierType(const SPAIopPMIToleranceModifier &iToleranceModifierType) ;

        PMIDimensionMainType ToDimensionMainType(const SPAIopPMIDimensionMainType & mainType) ;

        PMIDimensionSubType ToDimensionSubType(const SPAIopPMIDimensionSubType & subType) ;

        PMIUnit ToUnit(const SPAIopPMIUnit &featureAnnotationType) ;

        PMIDimensionFakeType ToDimensionFakeType(const SPAIopPMIDimensionFakeType & fakeType) ;

        PMIArrowSymbol ToArrowSymbol(const SPAIopPMIArrowSymbol & symbol) ;
        
        PMICalloutFeatureAnnotationType ToCalloutFeatureAnnotationType(const SPAIopPMICalloutFeatureAnnotationType & annotationType) ; 
    }
}

AMCAX_EXCHANGE_NAMESPACE_END

#endif